const Koa = require('koa')
const app = new Koa()

const router = require('koa-router')()
const bodyParser = require('koa-bodyparser') // 第三方中间件

/**
 * 1. 使用路由开发接口
 * 2. 介绍接口编写规范： RESTful API  (github)
 * 
 * @fn RESTful API  增 删 改 查
 * 1. 一个接口   /api/user
 * 2. 多个请求方式  get post delete put(patch) 
 * 
 *  增加接口： /api/user       method: post
 *  删除接口： /api/user/:id   method: delete
 *  修改接口： /api/user/:id   method: put
 *  查询接口： /api/user       method: get 
 * 
 *  rest ...rest
 * 
*/

const db = [
  {
    name: 'bawei',
    pwd: '123'
  }
];

//查
router.get('/api/user', async (ctx, next) => {
  console.log('get参数：', ctx.query)
  ctx.body = db;
})

// add
router.post('/api/user', async (ctx, next) => {
  // 获取参数 ctx.request.body   post不能直接获取到的 bodyparser 
  console.log('ctx.request.body', ctx.request.body)
  db.push(ctx.request.body)
  ctx.body = db;
})

// update
router.put('/api/user/:id', async (ctx, next) => {
  let { id } = ctx.params; // 获取动态路由参数方式
  console.log('id:', id)
  db[id] = ctx.request.body;
  ctx.body = db
})

// 删除
router.delete('/api/user/:id', async (ctx, next) => {
  let { id } = ctx.params;
  db.splice(id, 1)
  ctx.body = db
})

app.use(bodyParser())
// options: 在发起其他请求的时候，会先发起一个option请求，询问请求方式是否合法；
// 第三方的中间件必须在注册之后才能使用；
app.use(router.routes(), router.allowedMethods())



app.listen(3000, () => {
  console.log(`server port is 3000`)
})